import re

'''
正则表达式的作用对象必须是 字符串
'''

# re.search：扫描整个字符串，匹配第一个匹配的Match对象（未匹配返回 `None`）
text = "订单号: 12345, 金额: 789元"
match = re.search(r'\d+',text)
print(match.group())

# re.match：仅从字符串开头检查匹配，返回 `Match` 对象（未匹配返回 `None`）
text1 = "hello123"
match1 = re.match(r'^[a-z]+',text1)
print(match1.group())

# re.findall：返回所有匹配的子串列表（无分组时）或元组列表（有分组时）
text2 = "联系: user@example.com, 备用: admin@test.org"
match2 = re.findall(r'[\w.-]+@[\w.-]+',text2)
print(match2)

match3 = re.findall(r'([\w.-]+)@([\w.-]+)',text2)
print(match3)

# re.finditer：返回所有匹配的迭代器（适合大文本逐行处理），匹配到的内容需要通过循环取出
text4 = "a1 b2 c3"
match4 = re.finditer(r'\d+',text4)
for i in match4:
    print(i.group(),end="") # end="" 表示去掉默认的换行符
print('')

# re.sub：替换匹配的字串，返回新的字符串
text5 = "电话: 13812345678"
new_text5 = re.sub(r'(\d{3})\d{4}(\d{4})',r'\1****\2',text5)  # {3}表示匹配前一个字符3次
print(new_text5)

# re.split：按正则表达式分割字符串，返回列表
text6 = "Hello, world!How-are you?"
list6 = re.split(r'[^\w]+',text6)
print(list6)

# re.compile：预编译正则表达式，提高重复使用的性能
pattern = re.compile(r'\b[A-Z]\w+\b') # 匹配以大写字母开头的单词; \b表示单词边界，防止匹配单词的一部分
text7 = "Python is Awesome"
text8 = "Java and C++"
print(pattern.findall(text7))
print(pattern.findall(text8))

# Match的方法：.group 返回匹配的完整文本，等价于group(0) ; .groups 返回所有分组的元组，需要正则中有()分组
match = re.search(r'(\d{4})-(\d{2})-(\d{2})', "2023-10-05")
print(match.group())
print(match.groups())
print(match.group(1))